C语言数组传参以及字符串定义

C语言数组传参以及字符串定义,第1张

C语言的数组形参传递 打印数组与数组首个元素的地址是一样的
#include 
int main(){
	
	
   int b[2]={1,2};
   printf("%p\n",b);
   printf("%p\n",&b[0]);
  
	return 0;	
}

两者打印出来内存地址是一样的。


000000000061FE18
000000000061FE18
传参的时候,传入方法的是首个元素的地址
#include 
void test1(int *p){
	printf("%p\n",p);
   printf("sizeof %d\n",sizeof(p));
}
 
 
int main(){
	
	
   int b[4]={1,2,3,4};
   printf("%p\n",b);
   printf("%p\n",&b[0]);
   test1(b);
   test1(&b[0]);
	return 0;	
}

传递的参数是指针,sizeof 计算的是指针的大小,64位系统中指针大小是8字节

000000000061FE10
000000000061FE10
000000000061FE10
sizeof 8
000000000061FE10
sizeof 8
字符串数组

两种定义形式:
1、 char *b = “aA”;
2、 char c[] = “as”;
可认为字符串指针p与b具有相同地位

   char *b = "aA";
   char c[] = "ab";
   char *p;
   p = c;
#include 
int main()
{

   char *b = "aA";
   char c[] = "ab";
   char *p;
   p = c;

   printf("c的内存值%p\n", c);
   printf("c的指针值p为%p\n", p);
   printf("*p为字符串第一个元素%d\n", *p);
   printf("*(p+1)为字符串第二个元素%d\n", *(p + 1));
   printf("sizeof(p)为指针所占内存的大小%d\n", sizeof(p));
   printf("sizeof(c)为该字符串所占内存的大小%d\n", sizeof(c));
   printf("该char数组的长度%d\n", sizeof(c) / sizeof(*p));
   printf("==========采用char *b= \"aA\"; 定义的区别,无法获取整个字符串的长度\n");
   printf("*b为字符串第一个元素%d\n", *b);
   printf("*(b+1)为字符串第二个元素%d\n", *(b + 1));
   printf("*(b+2)为字符串第三个元素(数组边界溢出)%d\n", *(b + 2));
   printf("*(b+3)为字符串第四个元素(数组边界溢出)%d\n", *(b + 3));
   printf("sizeof(b)为指针所占内存的大小%d\n", sizeof(b));

}
c的内存值000000000061FE0D
c的指针值p为000000000061FE0D
*p为字符串第一个元素97
*(p+1)为字符串第二个元素98
sizeof(p)为指针所占内存的大小8
sizeof(c)为该字符串所占内存的大小3
该char数组的长度3
==========采用char *b= "aA"; 定义的区别,无法获取整个字符串的长度
*b为字符串第一个元素97
*(b+1)为字符串第二个元素65
*(b+2)为字符串第三个元素(数组边界溢出)0
*(b+3)为字符串第四个元素(数组边界溢出)99
sizeof(b)为指针所占内存的大小8

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/564255.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)

保存