int s[4][2]={1,2,3,4,5,6,7,8};
printf("\n%u,%d",s+1,*(s+1));
Ans 2665496,2665496
Run Code Online (Sandbox Code Playgroud)
二维数组(s + 1)给出第二行的地址,但为什么*(s + 1)没有给出值3?
char arr[10]="hello";
Run Code Online (Sandbox Code Playgroud)
我猜&arr这个数组是类型的char(*)[10].如果我是对的,那是什么类型的*(&arr)?是数组中第一个元素的类型基址还是地址?
int main()
{
int x = 10, y;
y = printf("x = %d\n", x);
printf("y = %d\n", y);
return 0;
}
output:
x = 10
y = 7
Run Code Online (Sandbox Code Playgroud)
我知道printf在打印字符串时返回字符数.但是为什么在打印时返回7.什么是printf打印int时的返回值?
可能重复: C中printf()函数的返回值
int samp=0;
for(i=0;i<=31;i++)
{
samp=samp|1<<i;
}
printf("\ %d\n",samp);
Run Code Online (Sandbox Code Playgroud)
输出:
-1
Run Code Online (Sandbox Code Playgroud)
如果我循环直到i<=31(将所有32位设置为1),为什么它给-1 ?当我循环时它只i<31给2147483647.为什么会这样?
此代码片段接收字符串、分隔符(空格)和向量作为参数,并根据分隔符拆分字符串并将其存储在向量中。如果我使用 push_back,它不会将任何内容存储到向量中,但如果我使用 [] 运算符,它就可以工作。有人可以解释为什么 push_back 不起作用吗?
void split(const string & input,char delim,vector<string> & elems){
stringstream ss;
ss.str(input);
string item;
int i = 0;
while(getline(ss,item,delim)){
//elems.push_back(item);
elems[i] = item;
i++;
}
}
int main(){
char delim = ' ';
vector<string> item(2);
string input;
getline(cin,input);
split(input,delim,item);
}
Run Code Online (Sandbox Code Playgroud) 将局部变量向量分配给map<int , std::vector<int>> m1in foo(),希望一旦超出范围,就无法访问s1的值.但事实并非如此.看起来向量中的元素存储在堆内存中,局部变量s1存储在堆栈中.当s1存储在map中时,看起来它分配了一个新的堆内存并将值复制到它.我的理解是对的吗?我打印foo中每个向量元素的地址以及map中每个向量元素的地址.
#include <iostream>
#include <map>
#include <set>
#include<vector>
using namespace std;
std::map<int , std::vector<int>> m1;
void foo(){
vector<int> s1 = { 10, 20, 30, 40 };
cout << "local var address: " << &s1 << "\n";
cout << "Element address " << &s1[0] << " " << &s1[1] << " "
<< &s1[3] << " " << &s1[4] << "\n";
m1[1] = s1;
}
int main() {
foo();
cout << "\nElement value and address …Run Code Online (Sandbox Code Playgroud)