我想了解下面的程序,但我不清楚.
#include<stdio.h>
int main()
{
int a[]={1,2,3,4,5,6,9};
printf("sizeof array is %d\n",sizeof(a));
printf("size of array using logic is %d\n",((&a)[1]-a));
printf("value of (&a)[1] is %p \n",(&a)[1]);
printf("value of a is %p \n",a);
printf("address of a[0] is %p\n",&a[0]);
printf("address of a[1] is %p\n",&a[1]);
printf("address of a[2] is %p\n",&a[2]);
printf("address of a[3] is %p\n",&a[3]);
printf("address of a[4] is %p\n",&a[4]);
printf("address of a[5] is %p\n",&a[5]);
printf("address of a[6] is %p\n",&a[6]);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码输出是:
sizeof array is 28
size of array using logic is 7
value of …Run Code Online (Sandbox Code Playgroud) 我在项目中有一个棘手的要求,要求编写函数,如果给定一个可表示为2 2n +1的整数,该函数将返回值 1(否则为 0)。其中n是任何非负整数。
int find_pow_2n_1(int M);
Run Code Online (Sandbox Code Playgroud)
例如:返回 1,当 M=5 时,因为当 n=1 -> 2 1*2 +1时输出 5 。
我正在尝试评估方程,但它导致日志函数,在 google 浏览时也无法找到任何类型的提示。
我试图通过引用调用将char指针的地址传递给函数.当我尝试检查主要和功能中的char指针的地址时,它们都不同,为什么?更令人惊讶的是,我无法理解的是,当使用引用调用时,函数中更新的字符串实际上也应该反映在main中.
void fun(char *str){
str = "hello";
printf(" str address in fun is = %p\n",str);
printf("In fun str is = %s\n",str);
}
int main(){
char *str = (char*) malloc(sizeof(10));
fun(str);
printf(" str address is = %p\n",str);
printf("In main str is = %s\n",str);
}
Run Code Online (Sandbox Code Playgroud)
该方案的产出如下:
str address in fun is = 0x804859b
In fun str is = hello
str address is = 0x839e008
In main str is =
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么会这样.任何人都可以解释这段代码中究竟发生了什么.为什么我无法从函数中获取main更新的字符串.[注意:当我使用int指针尝试相同的代码时,这很好用.我试图理解char指针场景中的堆内存角色.