我不明白以下代码的结果:
#include <stdio.h>
#include <conio.h>
int main()
{
int a[4]={1, 3, 5, 6};
//suppose a is stored at location 2010
printf("%d\n", a + 2);
printf("%d", a++);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么第二个printf函数会产生以下错误?
error: lvalue required as increment operand
可能重复:
将表示2D数组的指针传递给C++中的函数
我试图通过指针将我的二维数组传递给函数,并希望修改值.
#include <stdio.h>
void func(int **ptr);
int main() {
int array[2][2] = {
{2, 5}, {3, 6}
};
func(array);
printf("%d", array[0][0]);
getch();
}
void func(int **ptr) {
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
ptr[i][j] = 8;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但程序崩溃了.我做错了什么?
我是C++的新手,我正在编写以下代码.我需要遍历调用函数中的所有插件 - testFunction.我知道这在C#中有效,但是这段代码不起作用.任何人都可以指出在C++中正确的方法吗?
#include "stdafx.h"
#include <iostream>
#include "resource.h"
int testFunction(char* tester);
int _tmain()
{
int mainProd=2;
int Addons[]={7,8,9,10};
testFunction(mainProd,Addons);
}
void testFunction(int mainProd,int addons[])
{
for(int x = 0 ; addons.length;++x) ---- Not working
{
std::cout<< addons[x];
}
}
Run Code Online (Sandbox Code Playgroud)
我试图按照以下建议实现矢量
#include "stdafx.h"
#include <iostream>
#include "resource.h"
#include <vector>
void testFunction(std::vector<int> addons);
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<int> Addons ;
for(int i = 0 ;i<10;++i)
{
Addons.push_back(i);
}
testFunction(Addons);
}
void testFunction(std::vector<int> addons)
{
for(int i =0 ; …Run Code Online (Sandbox Code Playgroud) 有人可以向我解释为什么技术上2D阵列实际上并没有衰减,int**而当你有一个单维数组时,你会得到指针衰减int*(如果你有数组int).
我理解指针衰减是什么,但我不明白为什么2D数组不会出现这种衰变?
对于C或C++新手而言,这是一个常见的混淆,但我发现自己也常常绊倒它.
我有几个与数组相关的问题.我已经研究过,数组大小必须是常量的,声明/编译器必须知道它的值.但是使用GNU GCC编译器(C++ 11标准过滤器),我能够使用变量作为数组大小完美地编译和运行程序,同时动态声明所述数组(使用new)
int num;
cout << "How big an array? ";
cin >> num;
int *arr = new int [num];
Run Code Online (Sandbox Code Playgroud)
问题1)这被认为是标准吗?我的教授是矛盾的.
Ques2)如果它是标准的,那么在创建之后是否可以扩展数组(或任何数组)的大小?
Ques3)同样,如果这个表达式是标准的,那么是否可以在函数中使用它 - 例如.使用函数创建这样的数组?(如果是这样,怎么样?)
(PS:嗨,我是新手,也是C++的新手)
我刚看到这个代码片段Q4,并想知道我是否理解正确.
#include <stdio.h>
int main(void)
{
int a[5] = { 1, 2, 3, 4, 5 };
int *ptr = (int*)(&a + 1);
printf("%d %d\n", *(a + 1), *(ptr - 1));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我的解释:
int a[5] = { 1, 2, 3, 4, 5 };=> a指向数组的第一个元素.换句话说:a包含数组第一个元素的地址.
int *ptr = (int*)(&a + 1);=>这里&a将是一个双指针并指向整个数组.我把它想象成这样:int b[1][5] = {1, 2, 3, 4, 5};这里b指向一个2D数组的行.&a + 1应该指向内存中的下一个整数数组(不存在)[有点像,b + 1指向具有1行的2D数组的第二个(不存在的)行].我们把它转换为int …
这里的基本问题,(希望)一个简单的答案:我正在尝试编写一个函数,其第一个参数是std :: array,但具有任意大小.
void f(array<int> x) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
是无效的,因为我需要一个大小array<int, #>.有办法解决这个问题吗?
给定一个字符串数组,我需要找出其中的字符串数.
我跟着这个
但如果我将其传递给函数,这不起作用.
这是我试过的代码
#include<string>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f1(char* input1[])
{
string s="";
cout<<sizeof(input1)<<endl; //print 4
cout<<sizeof(char*)<<endl; //print 4
int l=sizeof(input1) / sizeof(char*);
//giving l=1 here but should be 8
}
int main()
{
char *str2[]={"baba","sf","dfvf","fbfebgergrg","afvdfvfv","we","kkhhff","L"};
int l=sizeof(str2) / sizeof(char*);
cout<<l<<endl; //print 8
cout<<sizeof(str2)<<endl; //print 32
cout<<sizeof(char*)<<endl; //print 4
f1(str2);
}
Run Code Online (Sandbox Code Playgroud) int (*arr)[5]means arr是一个包含5个整数的指针数组.现在究竟是什么指针?
如果我声明指向第一个元素的指针int arr[5]在哪里,它是否相同arr?
是arr从两个例子是一样的吗?如果没有,那么究竟什么是指向数组?
当我声明一个像这样的新数组:
int foo[5]
Run Code Online (Sandbox Code Playgroud)
是foo真正的指针数组的第一个元素?我能做到这一点:
*(foo+2)
Run Code Online (Sandbox Code Playgroud)
访问数组的第三个元素?假设我正在制作2D数组:
int foo[3][4]
Run Code Online (Sandbox Code Playgroud)
是foo现在int**?